﻿using System;

class Ball
{
    public int BallWidth { get; set; }             // пишем prop и Tab  Tab

    public int BallHeight { get; set; }
    
    public int BallDepth { get; set; }

    public Ball(Ball ball)      //така правим нова топка с координатите на старата топка и така спестяваме писане (какво писане?)
    {
        this.BallWidth = ball.BallWidth;
        this.BallHeight = ball.BallHeight;
        this.BallDepth = ball.BallDepth;    
    }

    public Ball(int ballWidth, int ballHeight, int ballDepth)
    {
        this.BallWidth = ballWidth;
        this.BallHeight = ballHeight;
        this.BallDepth = ballDepth;
    }

}
class Slides
{
    private static int width, depth, height;        //глобални променливи. За да се видят с дебъгване: Debug-Windows
    private static string[, ,] cube;
    private static Ball cubeBall;

    static void Main()
    {
        
        ReadInput();
        ProcessesBallCommands();
    }

    private static void ProcessesBallCommands()
    {
        while (true)
        {
            string currentCell = cube[cubeBall.BallWidth, cubeBall.BallHeight, cubeBall.BallDepth];

            string[] splittedCell = currentCell.Split();

            string command = splittedCell[0];

            switch (command)
            {
                case "S":
                    ProccessBallSlides(splittedCell[1]);    //втората команда
                    break;
                case "T":
                    cubeBall.BallWidth = int.Parse(splittedCell[1]);
                    cubeBall.BallDepth = int.Parse(splittedCell[2]);
                    break;
                case "B":
                    PrintMessage();
                    return;
                case "E":
                    if (cubeBall.BallHeight == height - 1)
                    {
                        PrintMessage();
                        return;
                    }
                    else
                    {
                        cubeBall.BallHeight++;  //ако не е на последния ред, увеличаваме височината на топката
                    }                    
                    break;
                default:
                    throw new ArgumentException("Invalid command!");
                    //break;       //след exception break не е нужен тъй като exception-a има същата функция
            }
        }

    }

    private static void ProccessBallSlides(string command)
    {
        Ball newCubeBall = new Ball(cubeBall);

        switch (command)
        {
            case "R":
                newCubeBall.BallHeight++;
                newCubeBall.BallWidth++;
                break;
            case "L":
                newCubeBall.BallHeight++;
                newCubeBall.BallWidth--;
                break;
            case "F":
                newCubeBall.BallHeight++;
                newCubeBall.BallDepth--;
                break;
            case "B":
                newCubeBall.BallHeight++;
                newCubeBall.BallDepth++;
                break;
            case "FL":
                newCubeBall.BallHeight++;
                newCubeBall.BallDepth--;
                newCubeBall.BallWidth--;
                break;
            case "FR":
                newCubeBall.BallHeight++;
                newCubeBall.BallDepth--;
                newCubeBall.BallWidth++;
                break;
            case "BL":
                newCubeBall.BallHeight++;
                newCubeBall.BallDepth++;
                newCubeBall.BallWidth--;
                break;
            case "BR":
                newCubeBall.BallHeight++;
                newCubeBall.BallDepth++;
                newCubeBall.BallWidth++;
                break;
            default:
                throw new ArgumentException("Invalide slide command!");
            //break;     //след exception break не е нужен тъй като exception-a има същата функция
        }
        if (IsPossible(newCubeBall))           //дали позицията, на която е топката е в куба
        {
            cubeBall = new Ball(newCubeBall);
        }
        else
        {
            PrintMessage();
            Environment.Exit(0);        //спира цялостното изпълнение на програмата
        }
    }

    private static void PrintMessage()
    {
        string currentCell2 = cube[cubeBall.BallWidth, cubeBall.BallHeight, cubeBall.BallDepth];

        if (currentCell2 == "B" || cubeBall.BallHeight != height - 1)       //проверяваме дали не сме на последния ред и дали не е кошница; Ако е кошница - Yes,ако сме на последния ред-No
        {
            Console.WriteLine("No");       //дали топката може да излезе от куба
        }
        else
        {
            Console.WriteLine("Yes");
        }
        Console.WriteLine("{0} {1} {2}", cubeBall.BallWidth, cubeBall.BallHeight, cubeBall.BallDepth);
    }

     static bool IsPossible(Ball ball)    //дали топката може да премине в следващото квадратче
    {
        if (ball.BallWidth >= 0 && ball.BallDepth >= 0 && ball.BallHeight >= 0 
            && ball.BallWidth < width && ball.BallHeight < height && ball.BallDepth < depth)
        {
            return true;
        }
        else
        {
            return false;
        }
    }

    private static void ReadInput()
    {
        string[] rawNumbers = Console.ReadLine().Split();
        width = int.Parse(rawNumbers[0]);
        height = int.Parse(rawNumbers[1]);
        depth = int.Parse(rawNumbers[2]);
        cube = new string[width, height, depth];

        for (int h = 0; h < height; h++)
        {
            string[] lineFragment = Console.ReadLine().Split(new string[] { " | " }, StringSplitOptions.RemoveEmptyEntries);

            for (int d = 0; d < depth; d++)
            {
                string[] cubeContent = lineFragment[d].Split(new char[] { '(', ')' }, StringSplitOptions.RemoveEmptyEntries);
                for (int w = 0; w < width; w++)
                {
                    cube[w, h, d] = cubeContent[w];
                }
            }
        }
        string[] rawBallCoords = Console.ReadLine().Split();    //сплитваме на празно място
        
        int ballWidth = int.Parse(rawBallCoords[0]);
        int ballDepth = int.Parse(rawBallCoords[1]);

        cubeBall = new Ball(ballWidth, 0, ballDepth);
    }
}

